﻿using System;
using CommonTypes;
using  System.Windows .Forms;
using MVCFramework.Presenter;

namespace MVCFramework.View
{
    public interface IViewForm:IView,IDrawable
    {
        IPresenter Presenter { get;set; }

        #region General Form 

        void Activate();
        void Close();
        event EventHandler Closed;
        void SetTitle ( string title);
        string Text { get; set; }

        #endregion 

        event ActionHandler OnViewMouseDown;
        event ActionHandler OnViewMouseMove;
        event ActionHandler OnViewMouseUp;

        bool IsActive { get; set; }
        event EventHandler<EventArgs> OnViewActivated;
        event EventHandler<EventArgs> OnViewDeActivated;
        event EventHandler<EventArgs> OnStateChanged;

        ViewState ViewState { get; set; }
        void SetViewState(Type viewState);
        void SetViewState(Type viewState, Type[] argTypes, object[] args, string[] argNames);
        //void SetMaxSpaceCalulationStrategy(MaxCalcFunction stategy);
        void SetOpenGLWorldBounds(double maxX, double maxY, double maxZ);
        void SetOpenGLWorldBounds(double maxX);
        void MoveGL();
        void Rotate();
        void ZoomIn();
        void ZoomOut();

        void ViewTop();
        void ViewBottom();
        void ViewLeft();
        void ViewRight();
        void ViewPerspective();
        void ViewFront();
        void ViewBack();

        void SetRotationAngles(double rx, double ry, double rz);

        Form MdiParent { get;set;}
        void Show();
    }
}
